package pessoal;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;

import loja.Gerenciador;
import loja.Venda;
import produtos.Classificacao;
import produtos.MP3;
import produtos.Produto;


public class Vendedor extends Pessoa implements Gerenciador{
	
	public Gerenciador gerenciador;
	public Produto produto;
	public Cliente cliente;
	
	public Vendedor(String nome){
		this.nome=nome;
		
	}
	
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
		
	public void realizaVenda(Cliente c, Produto p, Connection conexao) throws SQLException{
		
		String sql = "INSERT INTO Venda(Descricao, ClienteID, DataCompra, VendaID) values (?,?,?,?)";
		
		Venda venda = new Venda(p,c);
		venda.setId();
				
		System.out.println("Inserindo venda na tabela");
		PreparedStatement st = conexao.prepareStatement(sql);
		
		java.util.Date utilDate = venda.getDataAtual(); 
	    java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
			    
		st.setString(1, venda.descricao);   
		st.setDouble(2, c.getId()); 
		st.setDate(3, sqlDate);
		st.setDouble(4, venda.getId());
				
		st.executeUpdate();
		conexao.commit();
        st.close();
        System.out.println("Inserido com sucesso");
		
		
	}
	
	public void insereProduto(Produto produto, Connection conexao) throws SQLException{
		if(produto instanceof MP3){
		String sql = "INSERT INTO Produto(NOME,DESCRICAO,PRECOVENDA, CLASSIFICACAO, TIPO) "
				+ "values (?,?,?,?,?)";

		System.out.println("Inserindo produto na tabela");
		PreparedStatement st = conexao.prepareStatement(sql);

		st.setString(1, produto.getNome());
		st.setString(2, produto.getDescricao());
		st.setDouble(3, produto.getPreco());
		st.setString(4, ((MP3) produto).getClassificacao());
		st.setString(5, produto.getClass().getName());
				
		st.executeUpdate();
		conexao.commit();
		st.close();
		System.out.println("Inserido com sucesso");
		}

	}
	
	public void removeProduto(Produto produto, Connection conexao) throws SQLException{
		String sql = "DELETE FROM Produto WHERE NOME= ? AND DESCRICAO= ? AND PRECOVENDA= ?";

		System.out.println("Removendo produto da tabela");
		PreparedStatement st = conexao.prepareStatement(sql);

		st.setString(1, produto.getNome());
		st.setString(2, produto.getDescricao());
		st.setDouble(3, produto.getPreco());
		
		st.executeUpdate();
		conexao.commit();
		st.close();
		System.out.println("Removido com sucesso");

	}
	
	
	public void insereCliente(Cliente cliente, Connection conexao) throws SQLException{
		String sql = "INSERT INTO Cliente values (?,?,?,?)";

		System.out.println("Inserindo cliente na tabela");
		PreparedStatement st = conexao.prepareStatement(sql);

		st.setDouble(1, cliente.getId());   
		st.setString(2, cliente.getNome());
		st.setDouble(3, cliente.getIdade());
		st.setString(4, cliente.getSexo());

		st.executeUpdate();
		conexao.commit();
		st.close();
		System.out.println("Inserido com sucesso");

	}
	
	public void removeCliente(double id, Connection conexao) throws SQLException{
		String sql = "DELETE FROM Cliente WHERE CLIENTEID= ?";

		PreparedStatement st = conexao.prepareStatement(sql);

		try{
			System.out.println("Removendo cliente da tabela");

			st.setDouble(1, id);   

			st.executeUpdate();

			System.out.println("Removido com sucesso");
		} catch (SQLException e) {

			System.out.println(e.getMessage());

		} 
		finally{
			conexao.commit();
			st.close();
			
		}
	}

	public Cliente buscaCliente(String nome, Connection conexao) throws SQLException{
		String sql = "SELECT CLIENTEID, NOME, IDADE, SEXO FROM Cliente WHERE NOME LIKE'%"+nome+"%'";

		PreparedStatement st = conexao.prepareStatement(sql);
		Cliente cli = null;
		
		ResultSet rs = st.executeQuery(sql);

		try{
			System.out.println("Recuperando cliente");

			if(rs.next()){
				String name = rs.getString("NOME");
				int idade = rs.getInt("IDADE");
				double id = rs.getDouble("CLIENTEID");
				String sexo = rs.getString("SEXO");
				
				if(sexo==null){
					sexo="";
				}
				cli = new Cliente(name,idade,sexo);
				cli.setId(id);

				System.out.println("Recuperado com sucesso");
			}

		} catch (SQLException e) {

			System.out.println(e.getMessage());

		} 
		finally{
			conexao.commit();
			st.close();	
		}
		return cli;
	}

	public Produto buscaProduto(String nome, Connection conexao) throws SQLException{
		String sql = "SELECT NOME, DESCRICAO, PRECOVENDA, CLASSIFICACAO, TIPO FROM PRODUTO WHERE NOME='"+nome+"'";

		PreparedStatement st = conexao.prepareStatement(sql);
		
		ResultSet rs = st.executeQuery(sql);
		
		Produto prod=null;
		try{
			System.out.println("Recuperando produto");

			if(rs.next()){
				String name = rs.getString("NOME");
				String tipo = rs.getString("TIPO");
				String desc = rs.getString("DESCRICAO");
				double preco = rs.getDouble("PRECOVENDA");

				Classificacao classi;

				if(tipo.equals("MP3")){
					String classificacao = rs.getString("CLASSIFICACAO");
					switch (classificacao) {
					case "BREGA":
						classi = Classificacao.Brega;
						break;
					case "ROCK":
						classi = Classificacao.Rock;
						break;
					case "PAGODE":
						classi = Classificacao.Pagode;
						break;
					default:
						classi = Classificacao.Samba;
						break;
					}

					prod = new MP3(name,classi,preco);
					prod.setDescricao(desc);
				}
			}
			System.out.println("Recuperado com sucesso");
		} catch (SQLException e) {

			System.out.println(e.getMessage());

		} 
		finally{
			conexao.commit();
			st.close();
		}
		return prod;
	}
	
	public Venda buscaVenda(double id, Connection conexao) throws SQLException{
		String sql = "SELECT CLIENTEID, DESCRICAO, VENDAID FROM VENDA WHERE CLIENTEID= "+id;

		PreparedStatement st = conexao.prepareStatement(sql);
		Venda ven = null;

		ResultSet rs = st.executeQuery(sql);

		try{
			System.out.println("Recuperando venda");

			String desc = rs.getString("DESCRICAO");
			double clID = rs.getInt("CLIENTEID");
			double venId = rs.getDouble("VENDAID");

			if(rs.next()){
				ven = new Venda(desc, clID, venId);

				System.out.println("Recuperado com sucesso");
			}			

		} catch (SQLException e) {

			System.out.println(e.getMessage());

		} 
		finally{
			conexao.commit();
			st.close();	
		}
		return ven;
	}
	
	
	@Override
	public boolean pesquisar(Object o, ArrayList lista) {
		if(lista.contains(o)){
			return true;
		}

		return false;
	}

	@Override
	public void cadastrar(Object o, ArrayList lista) {
		lista.add(o);
	}

	@Override
	public void remover(Object o, ArrayList lista) {
		if(!lista.contains(o)){
			System.out.println("Lista nao contem elemento");
		}
		lista.remove(o);
	}
}
